import mongoose from "mongoose";
import { ObjectId } from "mongoose";
import { Application } from "egg";
import AutoIncrementFactory from "mongoose-sequence";

// 定义WorkProps接口，用于定义Work模型的数据结构
export interface WorkProps {
  id?: number; // 可选的id字段
  uuid: string; // 必填的uuid字段
  title: string; // 必填的title字段
  desc: string; // 必填的desc字段
  coverImg?: string; // 可选的coverImg字段
  content?: { [key: string]: any }; // 可选的content字段
  isTemplate?: boolean; // 可选的isTemplate字段，默认为false
  isPublic?: boolean; // 可选的isPublic字段，默认为false
  isHot?: boolean; // 可选的isHot字段，默认为false
  author: string; // 必填的author字段
  copiedCount: number; // 必填的copiedCount字段，默认为0
  status?: 0 | 1 | 2; // 可选的status字段，只能是0、1、2中的一个，默认为0
  user: ObjectId; // 必填的user字段，引用User模型
}

// 初始化Work模型
const initWorkModel = (app: Application) => {
  // 创建自增ID插件
  const autoIncreament = AutoIncrementFactory(app.mongoose);
  // 创建Work模型的schema
  const workSchema = new mongoose.Schema<WorkProps>(
    {
      uuid: { type: String, required: true }, // 必填的uuid字段
      title: { type: String, required: true }, // 必填的title字段
      desc: { type: String, required: true }, // 必填的desc字段
      coverImg: { type: String, required: true }, // 必填的coverImg字段
      content: { type: Object, required: true }, // 必填的content字段
      isTemplate: { type: Boolean, default: false }, // 可选的isTemplate字段，默认为false
      isPublic: { type: Boolean, default: false }, // 可选的isPublic字段，默认为false
      isHot: { type: Boolean, default: false }, // 可选的isHot字段，默认为false
      author: { type: String, required: true }, // 必填的author字段
      copiedCount: { type: Number, default: 0 }, // 必填的copiedCount字段，默认为0
      status: {
        type: Number,
        enum: [0, 1, 2], // 可选的status字段，只能是0、1、2中的一个，默认为0
        default: 0,
      },
      user: { type: mongoose.Schema.Types.ObjectId, ref: "User" }, // 必填的user字段，引用User模型
    },
    {
      timestamps: true, // 自动添加createdAt和updatedAt字段
      toJSON: {
        transform(_doc, ret) {
          delete ret.__v;
          delete ret.__v; // 删除__v字段
        },
      },
    }
  );
  // 使用自增ID插件
  workSchema.plugin(autoIncreament, { inc_field: "id" });
  // 返回Work模型
  return app.mongoose.model<WorkProps>("Work", workSchema);
};

// 导出初始化Work模型的函数
export default initWorkModel;
